﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ZPod.MTG.Communication
{
	public abstract class BaseServer : MarshalByRefObject
	{
		/// <summary>
		/// Diccionario Nombre -> Estado de los juegos disponibles en el servidor
		/// </summary>
		Dictionary<string, GameState> _games = new Dictionary<string, GameState>(StringComparer.InvariantCultureIgnoreCase);
		
		/// <summary>
		/// Crea un nuevo juego
		/// </summary>
		/// <param name="name"></param>
		public void CreateGame(string name)
		{
			if (!String.IsNullOrEmpty(name))
			{
				_games[name] = new GameState();
			}
		}

		/// <summary>
		/// Listado de juegos disponibles
		/// </summary>
		public List<string> AvailableGames
		{
			get
			{
				return _games.Keys.ToList();
			}
		}

		/// <summary>
		/// Establece el estado de un jugador en un juego
		/// </summary>
		/// <param name="game"></param>
		/// <param name="player"></param>
		/// <param name="state"></param>
		public void SetState(string game, string player, PlayerState state)
		{
			if (_games.ContainsKey(game))
			{
				_games[game].SetState(player, state);
			}
		}

		/// <summary>
		/// Devuelve el estado de un juego
		/// </summary>
		/// <param name="game"></param>
		/// <returns></returns>
		public GameState GetGame(string game)
		{
			if (_games.ContainsKey(game))
			{
				return _games[game];
			}
			else
			{
				return null;
			}
		}

		/// <summary>
		/// Agrega una carta a la zona "comun" de un juego
		/// </summary>
		/// <param name="game"></param>
		/// <param name="card"></param>
		public void AddCommonCard(string game, Card card)
		{
			if (_games.ContainsKey(game))
			{
				_games[game].CommonCards.Add(card);
			}
		}

		/// <summary>
		/// Quita una carta de la zona "comun" de un juego
		/// </summary>
		/// <param name="game"></param>
		/// <param name="index"></param>
		public void RemoveCommonCard(string game, int index)
		{
			if (_games.ContainsKey(game))
			{
				_games[game].CommonCards.RemoveAt(index);
			}
		}
	}
}
